package com.share.pattern.observer;

import java.util.ArrayList;
import java.util.List;

/**
 * 
 * @author Johnny Tam
 * 
 *         v0.1版本 观察者模式
 * 
 *         前台秘书类 问题： 如果在观察者中有人想看NBA直播， 你的前台代码类需要修改
 */
public class Secretary {

	// 同事列表
	private List<StockObserver> observers = new ArrayList<StockObserver>();
	private String action;

	// 增加
	public void Attach(StockObserver observer) {
		observers.add(observer);
	}

	// 通知给同事们
	public void Notify() {
		for (StockObserver o : observers) {
			o.Update();
		}
	}

	// 前台状态，活动
	public String getAction() {
		return action;
	}

	public void setAction(String action) {
		this.action = action;
	}

	// 移除同事
	public void Detach(StockObserver observer) {
		observers.remove(observer);
	}

}

// 看股票同事类
class StockObserver {

	private String name;
	private Secretary sub;

	public StockObserver(String name, Secretary sub) {
		this.name = name;
		this.sub = sub;
	}

	public void Update() {
		System.out.printf(sub.getAction() + "," + name + " 关闭股票行情，继续工作!!!\n");
	}

}
